package com.principle.demeter;

import java.util.ArrayList;
import java.util.List;

/**
 * @author xuehu
 * @date 2020/12/9 13:18
 * 迪米特法则1
 */

//客户端
public class Demeter1 {

    public static void main(String[] args) {
        //创建了一个CollegeManager对象
        CollegeManager collegeManager = new CollegeManager();
        //输出学院的员工ID和学校总部的员工信息
        collegeManager.printAllEmployee(new CollegeManager());
    }
}

//学校总部员工
class Employee {

    private String id;

    public String getId() {
        return id;
    }

    public void setId(String id) {
        this.id = id;
    }

}

//学院的员工类
class CollegeEmployee {

    private String id;

    public String getId() {
        return id;
    }

    public void setId(String id) {
        this.id = id;
    }

}

//管理学院员工的管理类

//分析CollegeManager类的直接朋友类 Employee ,CollegeManager
//CollegeEmployee不是直接朋友类，而是一个陌生类,不属于方法参数和返回值,违反了迪米特法则,陌生类最好不要以局部变量的形式出现在类的内部。
class CollegeManager {


    //返回学校总部员工
    public List<Employee> getAllEmployee() {
        List<Employee> collegeEmployeesList = new ArrayList<>();
        for (int i = 0; i < 5; i++) { //这里我们增加了10个员工到list集合
            Employee employee = new Employee();
            employee.setId("学校员工Id=" + i);
            collegeEmployeesList.add(employee);
        }
        return collegeEmployeesList;
    }


    //该方法完成输出学院总部和学院员工信息(id)
    void printAllEmployee(CollegeManager sub) {

        //分析问题
        //1.这里的CollegeEmployee 不是SchoolManager的直接朋友
        //2. CollegeEmployee 是以局部变量的方式出现在SchoolManager
        //3. 违反了迪米特法则


        //获取到学院员工
        List<CollegeEmployee> allEmployee = new ArrayList<>();

        System.out.println("-----------学院员工------");

        for (CollegeEmployee e : allEmployee) {
            System.out.println(e.getId());
        }
        //获取到学校总部的员工
        List<Employee> employeel = sub.getAllEmployee();
        System.out.println("--------学校总部员工-------");
        for (Employee e : employeel) {
            System.out.println(e.getId());
        }

    }
}

